#include "volumetool.h"
#include "ui_volumetool.h"

#include<QGraphicsDropShadowEffect>
#include <QPainter>

VolumeTool::VolumeTool(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::VolumeTool),
    isMuted(false),
    volumeRatio(20)
{
    ui->setupUi(this);

    //将窗口的格式设置为弹出
    // 由于默认窗⼝有阴影，因此还需要将窗⼝的原有的阴影去掉，窗⼝需要加上Qt::NoDropShadowWindowHint
    this->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);

    //设置窗口为透明背景属性,但是在windows上，设置透明效果后，窗⼝需要加上Qt::FramelessWindowHint格式
    this->setAttribute(Qt::WA_TranslucentBackground);

    //将窗⼝的原有的阴影去掉自定义阴影效果
    QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(this);
    shadowEffect->setOffset(0, 0);//阴影偏移量
    shadowEffect->setColor("#646464");//阴影颜色
    shadowEffect->setBlurRadius(10);//阴影圆角效果
    this->setGraphicsEffect(shadowEffect);

    //设置silenceBt图片
    ui->silenceBt->setIcon(QIcon(":/images/volumn.png"));

    //把音量的大小默认设为20%
    ui->volumeRatio->setText(" 20%");
    ui->outSlider->setGeometry(ui->outSlider->x(), 180 + 35 - 36, ui->outSlider->width(), 36);
    ui->sliderBt->move(ui->sliderBt->x(), ui->outSlider->y() - ui->sliderBt->height()/2);

    //当silenceBt按钮被按下
    connect(ui->silenceBt,&QPushButton::clicked,this,&VolumeTool::onsilenceBtClicked);

    //使用事件过滤器时一定要记得先安装
    ui->widget->installEventFilter(this);


}

VolumeTool::~VolumeTool()
{
    delete ui;
}

void VolumeTool::paintEvent(QPaintEvent *event)
{
    (void)event;
     //  创建绘图对象,将它应用到this中去
     QPainter painter(this);

     // 设置抗锯⻮
     painter.setRenderHint(QPainter::Antialiasing, true);

     // 设置画笔
     // 没有画笔时：画出来的图形就没有边框和轮廓线
     painter.setPen(Qt::NoPen);

     // 设置画刷颜⾊
     painter.setBrush(Qt::white);

     // 创建⼀个三⻆形
     QPolygon polygon;
     polygon.append(QPoint(30, 300));
     polygon.append(QPoint(70, 300));
     polygon.append(QPoint(50, 320));

     // 绘制三⻆形
     painter.drawPolygon(polygon);
}

void VolumeTool::onsilenceBtClicked()
{
    //1、改变siMuted状态
    this->isMuted = !isMuted;
    //2、改变图标
    if(this->isMuted)
    {
        //如果是静音状态
        ui->silenceBt->setIcon(QIcon(":/images/silent.png"));
    }
    else if(!this->isMuted)
    {
        //非静音状态
        ui->silenceBt->setIcon(QIcon(":/images/volumn.png"));
    }

    //3、通知qqmusic设置功能
    emit setSilence(isMuted);
}

bool VolumeTool::eventFilter(QObject *object, QEvent *event)
{
    //过滤widget中的事件
    if(object == ui->widget)
    {
        if(event->type() == QEvent::MouseButtonPress)
        {
            //鼠标按下，只需计算音量大小
            calcVolume();
        }
        else if(event->type() == QEvent::MouseMove)
        {
            //鼠标移动事件，只需计算音量大小
            calcVolume();
        }
        else if(event->type() == QEvent::MouseButtonRelease)
        {
            // 如果是⿏标释放事件，直接发射setMusicVolume信号即可
             emit setMusicVolume(volumeRatio);
        }



        return true;
    }

    return QObject::eventFilter(object,event);
}

void VolumeTool::calcVolume()
{
    //获取鼠标点击时的y坐标
    int height = ui->widget->mapFromGlobal(QCursor().pos()).y();

    //验证音量合法性
    height = height < 25 ? 25 :height;
    height = height >205 ? 205 :height;

    //更新outLine高低
    ui->outSlider->setGeometry(ui->outSlider->x(),height,ui->outSlider->width(),205-height);

    //更新按钮位置
    ui->sliderBt->move(ui->sliderBt->x(),ui->outSlider->y()-ui->sliderBt->height()/2);

    //计算音量大小
    volumeRatio = (int)(ui->outSlider->height()/(float)180 * 100);
    //更新音量百分比
    ui->volumeRatio->setText(QString::number(volumeRatio) + "%");
}











